home *** CD-ROM | disk | FTP | other *** search
/ Resource Library: Multimedia / Resource Library: Multimedia.iso / maestro / source / cdedit / toc.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-06-15  |  2.2 KB  |  113 lines

  1. /*************************************************************
  2.  *                                                           *
  3.  *                     file: toc.c                           *
  4.  *                                                           *
  5.  *************************************************************/
  6.  
  7. /*
  8.  * Copyright (C) 1988, 1989 Sun Microsystems, Inc.
  9.  */
  10.  
  11. #ifndef lint
  12. static char sccsid[] = "@(#)toc.c 1.3 89/11/14 Copyr 1989 Sun Micro";
  13. #endif
  14.  
  15. /*
  16.  * This file contains code for the table of contents data structure 
  17.  */
  18.  
  19. #include <stdio.h>
  20. #include "msf.h"
  21. #include "toc.h"
  22.  
  23. /************************ entry points ***********************/
  24.  
  25. Toc
  26. init_toc(start, end, total_msf)
  27. int    start, end;
  28. Msf    total_msf;
  29. {
  30.     Toc    toc;
  31.  
  32.     toc = (Toc)malloc(sizeof(struct toc));
  33.     toc->start_track = start;
  34.     toc->end_track = end;
  35.     toc->toc_list = (Track_entry *)malloc(sizeof(Track_entry) * 
  36.                           ((end - start) + 1));
  37.     toc->size = 0;
  38.     toc->total_msf = total_msf;
  39.     return (toc);
  40. }
  41.  
  42. void
  43. add_track_entry(toc, track_number, control, msf, next_msf)
  44. Toc    toc;
  45. int    track_number;
  46. int    control;
  47. Msf    msf;
  48. Msf    next_msf;
  49. {
  50.     register Track_entry    track_entry;
  51.  
  52.     track_entry = (Track_entry)malloc(sizeof(struct track_entry));
  53.     track_entry->track_number = track_number;
  54.     track_entry->control = control;
  55.     track_entry->msf = msf;
  56.     track_entry->duration = diff_msf(next_msf, msf);
  57.     toc->toc_list[toc->size++] = track_entry;
  58. }
  59.  
  60. void
  61. destroy_toc(toc)
  62. Toc    toc;
  63. {
  64.     free(toc->toc_list);
  65.     free(toc);
  66. }
  67.  
  68. Msf
  69. get_track_duration(toc, track_number)
  70. Toc    toc;
  71. int    track_number;
  72. {
  73.     Track_entry    te;
  74.  
  75.     if ((track_number > toc->end_track) ||
  76.         (track_number < toc->start_track)) {
  77.         return (Msf)NULL;
  78.     }
  79.     te = toc->toc_list[track_number - toc->start_track];
  80.     return (te->duration);
  81. }
  82.  
  83. int
  84. get_track_control(toc, track_number)
  85. Toc    toc;
  86. int    track_number;
  87. {
  88.     Track_entry    te;
  89.  
  90.     if ((track_number > toc->end_track) ||
  91.         (track_number < toc->start_track)) {
  92.         return (-1);
  93.     }
  94.     te = toc->toc_list[track_number - toc->start_track];
  95.     return (te->control);
  96. }
  97.  
  98. Msf
  99. get_track_msf(toc, track_number)
  100. Toc    toc;
  101. int    track_number;
  102. {
  103.     Track_entry    te;
  104.  
  105.     if ((track_number > toc->end_track) ||
  106.         (track_number < toc->start_track)) {
  107.         return (Msf)NULL;
  108.     }
  109.     te = toc->toc_list[track_number - toc->start_track];
  110.     return (te->msf);
  111. }
  112.  
  113.